<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class LoginError extends Model
{
    const LOGIN_ERROR_NUM_LIMIT = 6;

    /**
     * 检查IP登陆错误次数，超过阀值返回false
     * @param string $ip
     * @return bool
     * @author: lxy
     * @time: 2020/6/8 4:01 下午
     * @流程:
     */
    static public function CheckIpErrorNum(string $ip) : bool {
        $LoginError = LoginError::where('ip',$ip)->first();
        if (empty($LoginError)
            || $LoginError->error_num < self::LOGIN_ERROR_NUM_LIMIT) {
            return  true;
        }
        return false;
    }

    /**
     * 更新ip的登陆错误次数
     * @param string $ip
     * @return bool
     * @author: lxy
     * @time: 2020/6/8 4:11 下午
     * @流程:
     */
    static public function UpdateIpErrorNum(string $ip) : bool {
        $LoginError = LoginError::where('ip',$ip)->first();
        if (empty($LoginError)) {
            $LoginError = new LoginError;
            $LoginError->ip = $ip;
            $LoginError->save();
        } else {
            $LoginError->increment('error_num');
        }

        return true;
    }



    /**
     * ip 解除限制（即 error_num 清零）
     * @param string $ip
     * @return bool|string
     * @author: lxy
     * @time: 2020/6/8 4:05 下午
     * @流程:
     */
    static public function IpUnfreeze(string  $ip) {
        $LoginError = LoginError::where('ip',$ip)->first();
        if (empty($LoginError)) {
            return 'IP地址不正确，未找到相应的冻结信息';
        }
        $LoginError->error_num = 0;
        $LoginError->save();
        return true;
    }


    /**
     * 登陆成功之后清除错误记录
     * @param string $ip
     * @return bool
     * @author: lxy
     * @time: 2020/6/8 4:30 下午
     * @流程:
     */
    static public function ClearErrorNum(string  $ip) {
        $LoginError = LoginError::where('ip',$ip)->first();
        if ($LoginError) {
            $LoginError->error_num = 0;
            $LoginError->save();
        }
        return true;
    }
}
